package cn.doitedu.javase.json;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;

import java.util.List;

/**
 * @Author: 深似海
 * @Site: <a href="www.51doit.com">多易教育</a>
 * @QQ: 657270652
 * @Date: 2024/2/1
 * @Desc: 学大数据，上多易教育
 *   json解析
 **/
public class _01_Json解析示例 {

    public static void main(String[] args) {

        String json = "{\n" +
                "\"user_id\":1,\n" +
                "\"user_name\":\"张三\",\n" +
                "\"age\":18,\n" +
                "\"score\":98.8,\n" +
                "\"girl_friends\":[\n" +
                "    {\n" +
                "    \t\"nick_name\":\"宝宝\",\n" +
                "    \t\"together_years\":2,\n" +
                "    },\n" +
                "    {\n" +
                "    \t\"nick_name\":\"宝子\",\n" +
                "    \t\"together_years\":4,\n" +
                "    },\n" +
                "    {\n" +
                "    \t\"nick_name\":\"亲亲\",\n" +
                "    \t\"together_years\":8,\n" +
                "    }\n" +
                "]\n" +
                "\n" +
                "}";

        // 解析方法1：为json定义出对应结构的Java类，然后调用fastjson，直接将json解析成我们定一点java对象
        User user = JSON.parseObject(json, User.class);

        List<GirlFriend> girlFriends = user.getGirl_friends();
        for (GirlFriend girlFriend : girlFriends) {
            System.out.println(girlFriend);
        }

        // 解析方法2：不去为json结构定义对应的java类，而是让fastjson解析成一个通用对象，然后从通用对象中取值

        // 1.现将json整体解析成最外层的大通用对象
        JSONObject jsonObject = JSON.parseObject(json);
        // 2.从最外层对象中取一个key（类型是一个json数组）
        JSONArray girlFriends1 = jsonObject.getJSONArray("girl_friends");
        // 3.从上一步得到的json数组中取第2个元素（类型是 jsonObject）
        JSONObject girl = girlFriends1.getJSONObject(1);
        // 4.从上一步得到的jsonObject对象中，取一个字符串类型的key
        String nickName = girl.getString("nick_name");

        System.out.println(nickName);

    }
}
